package cn.com.dycc.sys_manage.menusysmanagement.dao;

import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import cn.com.dycc.sys_manage.menusysmanagement.entity.Menu;
import cn.com.dycc.sys_manage.menusysmanagement.entity.MenuResult;
import cn.com.dycc.sys_manage.menusysmanagement.entity.MenuResultList;
import cn.com.dycc.sys_manage.menusysmanagement.param.MenuListParam;




/**
 * 菜单的持久层接口
 * Description: 
 * Author: linfangan
 * Version: 1.0
 * Create Date Time: 2017年8月9日 上午9:18:54.
 * Update Date Time: 
 * @see
 */
@Repository("menuDao")
public interface MenuDao {
	/**
	 * 增加菜单
	 * @param menu 新增菜单信息
	 * @return 增加成功返回1
	 */
	public int addMenu(Menu menu);
	
	/**
	 * 查询菜单是否存在
	 * @param sys_flag 1:pc 2 手机 3 微信
	 * @param org_id 组织标识
	 * @return int 所有菜单编号的集合
	 */
	public int findAllMenuNo(
			@Param("menu_no")String menu_no,
			@Param("sys_flag")String sys_flag,
			@Param("org_id")String org_id);
	/**
	 * 查询所有的菜单信息
	 * @param sys_flag 1:pc 2 手机 3 微信
	 * @param org_id 组织标识
	 * @return List 所有菜单信息的集合
	 */
	public List<Menu> findAllMenu(
			@Param("sys_flag")String sys_flag,
			@Param("org_id")String org_id);
	
	/**
	 * 根据菜单id查询菜单信息
	 * @param menuNo 菜单id
	 * @return 查询到的菜单信息
	 */
	public Menu findMenuByMenuNo(String menu_no);
	/**
	 * 根据菜单id查询菜单信息  用于展示
	 * @param menuNo 菜单id
	 * @return 查询到的菜单信息
	 */
	public MenuResult queryTheMenubyMenuId(String menu_no);
	/**
	 * 删除选定的菜单信息
	 * @param menuNo 选定的菜单ID
	 * @return int 删除成功返回1
	 */
	public int deleteMenuByMenuNo(String menuNo);
	/**
	 * 更新菜单的信息
	 * @param menu 更新后信息
	 * @return 更新成功返回1
	 */
	public int updateMenuByMenuNo(Menu menu);
	
	/**
	 * 查询菜单部分信息
	 * @param sys_flag 1:pc 2 手机 3 微信
	 * @param org_id 组织标识
	 * @return 菜单的部分信息
	 */
	public List<Map<String,Object>> findPartMenu(
			@Param("sys_flag") String sys_flag,
			@Param("org_id") String org_id);
	
//	/**
//	 * 根据pid查询菜单信息
//	 * @param pid
//	 * @return
//	 */
//	public List<Menu> findMenuByPid(Integer pid);
	
//	/**
//	 * 查询所有的菜单
//	 * @return
//	 */
//	public List<Menu> selectAllMenuByTopDeptNo(Integer menuNo);
	
	/**
	 * pid为0的菜单id
	 * @param sys_flag 1:pc 2 手机 3 微信
	 * @param org_id 组织标识
	 * @return
	 */
	public List<String> selMenuNoByPidOf(
			@Param("sys_flag")String sys_flag,
			@Param("org_id")String org_id);
	
	/**
	 * 利用存储过程查询所有菜单信息，排序
	 * @param menu_no
	 * @return
	 */
	public List<Map<String,Object>> findAllMenuByShowChildLst(String menu_no);
	
//	/**
//	 * 根据id批量查询菜单信息
//	 * @param listMenuNo
//	 * @return
//	 */
//	public List<Menu> findMenuPermission(List<String> listMenuNo);
	
	/**
	 * 根据菜单名称查询菜单信息
	 * @param menu_name 菜单名称
	 * @param sys_flag 1:pc 2 手机 3 微信
	 * @param org_id 组织标识
	 * @return
	 */
	public Menu findMenuByMenuName(
			@Param("menu_name") String menu_name,
			@Param("sys_flag") String sys_flag,
			@Param("org_id")String org_id,
			@Param("pid")String pid
			);
	
	/**
	 * 查询菜单信息，用于pc端菜单的显示
	 * @param user_id 用户id
	 * @param sys_flag 终端标识
	 * @param org_id 组织标识
	 * @return
	 */
	public List<Menu> findMenuInfoByMap(
			@Param("user_id") String user_id,
			@Param("sys_flag") String sys_flag,
			@Param("org_id")String org_id
			);
	
	/**
	 * 查询菜单信息，用于手机和微信端菜单的显示
	 * @param sys_flag 终端标识
	 * @param org_id 组织标识
	 * @return
	 */
	public List<Menu> findInfoBySysFlag(
			@Param("user_id") String user_id,
			@Param("sys_flag") String sys_flag,
			@Param("org_id")String org_id
			);
	/**
	 * 查询全部菜单 用户菜单列表展示
	 * @param menu_name
	 * @param sys_flag
	 * @param org_id
	 * @param start
	 * @param size
	 * @return
	 */
	public List<MenuResultList> findMenuList(MenuListParam menuListParam);
	
	/**
	 * 查询全部菜单 用户菜单列表展示的统计条数
	 * @param menu_name
	 * @param sys_flag
	 * @param org_id
	 * @return
	 */
	public String countMenuList(
			@Param("menu_name") String menu_name,
			@Param("sys_flag") String sys_flag,
			@Param("org_id")String org_id
			);


}
